﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FrameworkLib.Filters;
using GestionePolveri2.DAL;
using LinqKit;
using System.Data.Objects;

namespace GestionePolveriLib.BL.FilterBags
{
    public class ReportTracciabilitaFilterBag : FilterBase<Movimenti>, IFilterBase
    {
        public string Operatore { get; set; }
        public int[] Impianto { get; set; }
        public string CodiceLotto { get; set; }
        public int[] Causale { get; set; }

        public ReportTracciabilitaFilterBag()
        {
            Operatore = null;
            Impianto = null;
        }

        public override System.Linq.Expressions.Expression<Func<Movimenti, bool>> SetUpFilter()
        {
            var predicate = PredicateBuilder.True<Movimenti>();

            if (this.UseDates)
            {
                // aggiungi al filtro il controllo sulla data...
                predicate = predicate.And(im => (EntityFunctions.TruncateTime(im.DataMovimento) >= EntityFunctions.TruncateTime(this.PeriodFrom)) &&
                                                 EntityFunctions.TruncateTime(im.DataMovimento) <= EntityFunctions.TruncateTime(this.PeriodTo));
            }
            
            if (Impianto != null)
            {
                predicate = predicate.And(im => Impianto.Contains(im.Impianti.IDImpianto));
            }

            if (!string.IsNullOrWhiteSpace(CodiceLotto))
            {
                predicate = predicate.And(im => im.Lotti.CodLotto == CodiceLotto);
            }

            if (Causale != null)
            {
                predicate = predicate.And(im => Causale.Contains(im.CausaliMagazzino.IDCausale));
            }

            if (!string.IsNullOrWhiteSpace(Operatore))
            {
                predicate = predicate.And(im => im.aspnet_Users.UserName == Operatore);
            }

            return predicate;
        }
    }
}
